package com.sprouting.ops.model;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sprouting.ops.annotations.invoke.CheckIsNullOrEmpty;
import com.sprouting.ops.annotations.invoke.CheckLength;
import com.sprouting.ops.annotations.invoke.CheckNotNull;
import com.sprouting.ops.interfaces.AddGroup;
import com.sprouting.ops.interfaces.UpdGroup;
import lombok.Data;

/**
 * 干系人(OpsStakeholder)(OPS_STAKEHOLDER) 表实体类
 *
 * @author ：lx（长沙麓谷）
 * @date 创建时间：2025-09-01 16:53:16
 */
@Data
@TableName("ops_stakeholder")
public class OpsStakeholder extends BaseModel {

    /**
     * 主键
     */
    @CheckNotNull(message = "非法ID", groups = UpdGroup.class)
    @CheckIsNullOrEmpty(message = "无效ID", groups = AddGroup.class)
    @TableId
    private String id;
    /**
     * 场所ID
     * @see OpsSite#getId()
     */
    @CheckNotNull(message = "请选择场所")
    private String siteId;
    /**
     * 头像
     * @see DromaraFileStorage#getId()
     */
    private String ico;
    /*
    ======  (身份识别-start) ==
     */
    /**
     * 姓名
     */
    @CheckNotNull(message = "请输入姓名")
    @CheckLength(min = 1, max = 150, message = "姓名超过长度限制")
    private String name;
    /**
     * 性别
     * @see com.sprouting.ops.interfaces.ConstantBase.Sex
     */
    private Integer sex;
    /**
     * 年龄说明
     */
    @CheckLength(max = 150, message = "年龄说明超过长度限制")
    private String age;
    /**
     * 组织层级;个人/团队/部门/公司/联盟/政府
     * @see OpsSysDict#getId()
     */
    private String level;
    /**
     * 干系人类型;内部、外部、特殊群体
     * @see OpsSysDict#getId()
     */
    private String stakeholderType;
    /**
     * 组织角色/职位
     */
    @CheckLength(max = 150, message = "组织角色/职位超过长度限制")
    private String orgRole;
    /**
     * 项目内角色 Sponsor、PM、核心用户、监管方、供应商、支持人员、受影响公众等
     * @see OpsSysDict#getId()
     */
    private String projectRole;
    /*
    ======  (身份识别-end) ==
     */

     /*
    ======  (联系与可达性-start) ==
     */
    /**
     * 邮箱
     */
    @CheckLength(max = 150, message = "邮箱超过长度限制")
    private String email;
    /**
     * 手机号
     */
    @CheckLength(max = 150, message = "手机号超过长度限制")
    private String phone;
    /*
    ======  (联系与可达性-end) ==
     */

    /*
    ======  (利益与影响-start) ==
     */
    /**
     * 核心利益点
     */
    private String benefitPoint;
    /**
     * 利益类别;财务、合规、声誉、技术、资源、政策、社会、环境
     */
    private String benefitClass;
    /**
     * 正向/负向影响
     * @see com.sprouting.ops.interfaces.ConstantBase.YesOrNo#YES 正向
     * @see com.sprouting.ops.interfaces.ConstantBase.YesOrNo#NO 负向
     */
    private Integer influenceTrend;
    /**
     * 影响领域;范围、进度、成本、质量、安全、文化…
     */
    private String influenceField;
    /*
    ======  (利益与影响-end) ==
     */

    /*
    ======  (权力–利益矩阵-start) ==
     */
    /**
     * 权力级别 高/中/低--
     * @see com.sprouting.ops.interfaces.ConstantBase.StakeholderLevel
     */
    private String rightLevel;
    /**
     * 利益级别;高/中/低
     * @see com.sprouting.ops.interfaces.ConstantBase.StakeholderLevel
     */
    private String interestLevel;
    /**
     * 利益象限;关键玩家、保持满意、随时告知、最小努力
     */
    private String interestQuadrant;
    /**
     * 当前支持度;-5强烈反对 … +5强烈支持
     */
    private Integer supportId;
    /*
    ======  (权力–利益矩阵-end) ==
     */

     /*
    ======  (权力–沟通管理-start) ==
     */
    /**
     * 沟通目标- 告知/咨询/参与/共决/授权
     */
    private String interactTarget;
    /**
     * 沟通频次;每日/每周/每里程碑/事件触发
     */
    private String interactFrequency;
    /**
     * 沟通方式;报、评审、深度研讨、1-on-1
     */
    private String interactFormat;
    /**
     * 沟通负责人
     */
    private String interactPerson;
     /*
    ======  (权力–沟通管理-end) ==
     */

     /*
    ======  (约束与依赖-start) ==
     */
    /**
     * 对干系人的依赖-;资金批复、资源批准、法规签字
     */
    private String dependentOneself;
    /**
     * 干系人对项目的依赖;交付物、数据、培训
     */
    private String dependentProject;
     /*
    ======  (约束与依赖-end) ==
     */

     /*
    ======  (文化与个人画像-start) ==
     */
    /**
     * 决策风格- 数据驱动、权威式、共识式
     */
    private String decisionStyle;
    /**
     * 个人动机;职业晋升、技术理想、社会价值
     */
    private String motivation;
    /**
     * 个人忌讳/雷区
     */
    @CheckLength(max = 150, message = "个人忌讳/雷区超过长度限制")
    private String taboo;
    /**
     * 学历
     */
    @CheckLength(max = 150, message = "学历超过长度限制")
    private String education;
      /*
    ======  (文化与个人画像-end) ==
     */

}
